home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / rpm.inc < prev    next >
Text File  |  2005-03-31  |  5KB  |  194 lines

  1. #
  2. # (C) Tenable Network Security
  3. #
  4. # $Id: rpm.inc,v 1.8 2005/02/22 15:54:02 renaud Exp $
  5.  
  6.  
  7.  
  8. function parse_rpm_name(rpm, yank)
  9. {
  10.  local_var elems, num, i, name;
  11.  local_var my_rpm;
  12.  
  13.  elems = split(rpm, sep:"|", keep:0);
  14.  if ( max_index(elems) > 1 )
  15.  {
  16.   my_rpm["epoch"] = elems[1];
  17. #  my_rpm["keyid"] = elems[2];
  18.   rpm = elems[0];
  19.  }
  20.  elems = split(rpm, sep:"-", keep:0);
  21.  num = max_index(elems);
  22.  name = elems[0];
  23.  for ( i = 1; i < num - 2 ; i ++ )
  24.  {
  25.   name += "-" + elems[i];
  26.  }
  27.  
  28.  
  29.  my_rpm["name"]     = name;
  30.  my_rpm["version"]  = elems[num - 2];
  31.  my_rpm["release"] = elems[num - 1];
  32.  
  33.  if ( yank ) {
  34.     my_rpm["version"]  -= yank;
  35.         my_rpm["release"] -= yank;
  36.         my_rpm["epoch"] -= yank;
  37.  }
  38.  
  39.  return my_rpm;
  40. }
  41.  
  42.  
  43. function vers_cmp(a, b)
  44. {
  45.  local_var array_a, array_b, i, max;
  46.  
  47.  array_a = split(a, sep:".", keep:0);
  48.  array_b = split(b, sep:".", keep:0);
  49.  
  50.  if ( max_index(array_b) < max_index(array_a))
  51.     max = max_index(array_a);
  52.  else
  53.     max = max_index(array_b);
  54.  
  55.  for ( i = 0 ; i < max ; i ++ )
  56.  {
  57.   if ( max_index(array_a) <= i ) return -1;
  58.   if ( max_index(array_b) <= i ) return 1;
  59.  
  60.   if ( int(array_a[i]) != int(array_b[i]) )
  61.   {
  62.     return int(array_a[i]) - int(array_b[i]);
  63.   }
  64.  }
  65.  
  66.  return 0;
  67. }
  68.  
  69.  
  70. function rpm_cmp(rpm, reference, yank, epoch)
  71. {
  72.  local_var my_rpm, my_reference, eq, ep;
  73.  
  74.  my_rpm = parse_rpm_name(rpm:rpm, yank:yank);
  75.  my_reference = parse_rpm_name(rpm:reference, yank:yank);
  76.  
  77.  if ( epoch )
  78.   {
  79.   eq = int(my_rpm["epoch"]) - int(epoch);
  80.   if ( eq  ) return eq;
  81.   }
  82.  
  83.  eq = vers_cmp(a:my_rpm["version"], b:my_reference["version"]);
  84.  if ( eq ) return eq;
  85.  
  86.  return vers_cmp(a:my_rpm["release"], b:my_reference["release"]);
  87. }
  88.  
  89.  
  90. function rpm_check(prefix, reference, yank, release, epoch)
  91. {
  92.  local_var rh_release, rpms, package, lines, e, my_rpm, ok, suse_release, mdk_release;
  93.  
  94.  rh_release = get_kb_item("Host/RedHat/release");
  95.  suse_release = get_kb_item("Host/SuSE/release");
  96.  mdk_release = get_kb_item("Host/Mandrake/release");
  97.  if ( release )
  98.  {
  99.   if ( "MDK" >< release && release != mdk_release ) return 0;
  100.   if ( "SUSE" >< release && release != suse_release ) return 0;
  101.   else if ( release == "RHEL4" && !egrep(pattern:"Red Hat Enterprise Linux.*release 4", string:rh_release) ) return 0;
  102.   else if ( release == "RHEL3" && !egrep(pattern:"Red Hat Enterprise Linux.*release 3", string:rh_release) ) return 0;
  103.   else if ( release == "RHEL2.1" && !egrep(pattern:"Red Hat.*(Enterprise|Advanced).*release 2\.1", string:rh_release) ) return 0;
  104.   else if ( release == "FC1" && "Fedora Core release 1" >!< rh_release ) return 0;
  105.   else if ( release == "FC2" && "Fedora Core release 2" >!< rh_release ) return 0;
  106.   else if ( release == "FC3" && "Fedora Core release 3" >!< rh_release ) return 0;
  107.  }
  108.  else if ( ! egrep(pattern:"Red Hat.*(Enterprise|Advanced).*release", string:rh_release) ) return 0;
  109.  
  110.  if ( "SUSE" >< release ) 
  111.      rpms = get_kb_item("Host/SuSE/rpm-list");
  112.  else if ("MDK" >< release)
  113.     rpms = get_kb_item("Host/Mandrake/rpm-list");
  114.  else
  115.     rpms = get_kb_item("Host/RedHat/rpm-list");
  116.  
  117.  if ( ! rpms ) return 0;
  118.  
  119.  
  120.  if ( prefix )
  121.   {
  122.   if ( "kernel-" == prefix )
  123.       package = egrep(pattern:"^kernel-([0-9]|unsupported|source|smp|hugemem|doc|BOOT)", string:rpms);
  124.     else 
  125.       package = egrep(pattern:"^" + prefix, string:rpms);
  126.   }
  127.  else
  128.  {
  129.   my_rpm = parse_rpm_name(rpm:reference, yank:yank);
  130.   package = egrep(pattern:"^" + my_rpm["name"] + "-[0-9]", string:rpms);
  131.  }
  132.   
  133.  if ( ! package ) return 0;
  134.  lines = split(package, sep:'\n', keep:0);
  135.  foreach package (lines)
  136.  {
  137.      e =  rpm_cmp(rpm:package, reference:reference, yank:yank, epoch:epoch);
  138.      if ( e < 0 )
  139.         {
  140.          if ( "kernel-" >!< reference )
  141.             return 1;
  142.         }
  143.         else ok = 1;
  144.  }
  145.  
  146.  if ( "kernel-" >!< reference )
  147.     return 0;
  148.  else
  149.     {
  150.     if ( ok ) 
  151.      return 0;
  152.     else 
  153.          return 1;
  154.     }
  155. }
  156.  
  157.  
  158. function rpm_exists(rpm, release)
  159. {
  160.  local_var rh_release,suse_release, mdk_release, rpms, package, lines, e, my_rpm, ok;
  161.  
  162.  rh_release = get_kb_item("Host/RedHat/release");
  163.  suse_release = get_kb_item("Host/SuSE/release");
  164.  mdk_release = get_kb_item("Host/Mandrake/release");
  165.  if ( release )
  166.  {
  167.   if ( "MDK" >< release && release != mdk_release ) return 0;
  168.   if ( "SUSE" >< release && release != suse_release) return 0;
  169.   if ( release == "RHEL4" && !egrep(pattern:"Red Hat Enterprise Linux.*release 4", string:rh_release) ) return 0;
  170.   if ( release == "RHEL3" && !egrep(pattern:"Red Hat Enterprise Linux.*release 3", string:rh_release) ) return 0;
  171.   if ( release == "RHEL2.1" && !egrep(pattern:"Red Hat.*(Enterprise|Advanced).*release 2\.1", string:rh_release) ) return 0;
  172.   if ( release == "FC1" && "Fedora Core release 1" >!< rh_release ) return 0;
  173.   if ( release == "FC2" && "Fedora Core release 2" >!< rh_release ) return 0;
  174.   if ( release == "FC3" && "Fedora Core release 3" >!< rh_release ) return 0;
  175.  }
  176.  else if ( ! egrep(pattern:"(Red Hat.*(Enterprise|Advanced).*release|Fedora Core)", string:rh_release) ) return 0;
  177.  
  178.  if ( "SUSE" >< release ) 
  179.      rpms = get_kb_item("Host/SuSE/rpm-list");
  180.  else if ("MDK" >< release)
  181.     rpms = get_kb_item("Host/Mandrake/rpm-list");
  182.  else
  183.     rpms = get_kb_item("Host/RedHat/rpm-list");
  184.  
  185.  if ( ! rpms ) return 0;
  186.  
  187.  if ( egrep(pattern:"^" + rpm, string:rpms) ) 
  188.     return 1;
  189.   else
  190.     return 0;
  191.  
  192. }
  193.  
  194.